﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;


namespace ReplaceCsv
{
    /// <summary>
    /// 生成したインスタンスのインターフェース
    /// </summary>
    public interface InputOutputConverter
    {
        /// <summary>
        /// インスタンスを生成して返却する
        /// </summary>
        /// <param name="inputFileName">入力ファイル名（あらかじめ検査済であること）</param>
        /// <param name="outputFilename">出力ファイル名（あらかじめ検査済であること）</param>
        /// <returns></returns>
        InputOutputConverter createInstance(string inputFileName, string outputFileName);
        /// <summary>
        /// インスタンスを生成して返却する
        /// </summary>
        /// <param name="inputFileName">入力ファイル名（あらかじめ検査済であること）</param>
        /// <param name="outputFilename">出力ファイル名（あらかじめ検査済であること）</param>
        /// <returns></returns>
        InputOutputConverter createInstance(string[] inputFileName, string[] outputFileName, Dictionary<string, object> option);
        /// <summary>
        /// 変更処理を実行する。
        /// </summary>
        /// <returns></returns>
        bool execute();

        bool execute(ProgressBar bar);

        /// <summary>
        /// 入力ファイルの拡張子を返却する
        /// </summary>
        /// <returns></returns>
        string getInputExt();
        /// <summary>
        /// 出力ファイルの拡張子を返却する
        /// </summary>
        /// <returns></returns>
        string getOutputExt();
    }
    /// <summary>
    /// インスタンスを生成するイニシエータ
    /// </summary>
    public abstract class InputOutputConvertInitiator
    {
        /// <summary>
        /// クラス名を指定して、対象のコンバーターを生成する。(現在は適当なクラス)
        /// </summary>
        /// <param name="className"></param>
        /// <returns></returns>
        public static InputOutputConverter getInitialInstance(string className)
        {
            //return new ConvertCsv();
            return new WallConvert1();
        }
    }
}
